﻿using BusinessLogicLayer;
using Equin.ApplicationFramework;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace PresentationLayer
{
    public delegate void CapNhatDSCV(LoaiHanhDong hd, ChucVu cv);
    public delegate void CapNhatDSKN(LoaiHanhDong hd, KyNang kn);

    public partial class frmCapNhatTTNV : Form
    {
        public NhanVien nv;
        public HoSoUngVien hs;
        public CapNhatDSNV CapNhatDS;
        List<string> dsKN = new List<string>();

        public bool ThanhCong { get; set; }

        public frmCapNhatTTNV()
        {
            InitializeComponent();
            dtpNgayNhan.Value = DateTime.Today;
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private bool KTraThongTin()
        {
            if (!KTraMaNV(mtxtMaNV.Text.Trim()))
            {
                HienThongBao("Mã nhân viên không đủ 6 ký tự!", "Lỗi", MessageBoxIcon.Error);
                mtxtMaNV.Focus();
                return false;
            }
            if (txtHo.Text.Trim() == "")
            {
                HienThongBao("Thông tin họ nhân viên chưa có!", "Lỗi", MessageBoxIcon.Error);
                txtHo.Focus();
                return false;
            }
            if (txtTen.Text.Trim() == "")
            {
                HienThongBao("Thông tin tên nhân viên chưa có!", "Lỗi", MessageBoxIcon.Error);
                txtTen.Focus();
                return false;
            }
            if (dtpNgaySinh.Value == DateTime.MinValue)
            {
                HienThongBao("Thông tin ngày sinh chưa có!", "Lỗi", MessageBoxIcon.Error);
                dtpNgaySinh.Focus();
                return false;
            }
            if (!KTraNgaySinh(dtpNgaySinh.Value))
            {
                HienThongBao("Nhân viên chưa đủ 18 tuổi!", "Lỗi", MessageBoxIcon.Error);
                dtpNgaySinh.Focus();
                return false;
            }
            if (!KTraCMND(mtxtCMND.Text.Trim()))
            {
                HienThongBao("CMND không đủ 9 số!", "Lỗi", MessageBoxIcon.Error);
                mtxtCMND.Focus();
                return false;
            }
            if (txtDiaChi.Text.Trim() == "")
            {
                HienThongBao("Thông tin địa chỉ chưa có!", "Lỗi", MessageBoxIcon.Error);
                txtDiaChi.Focus();
                return false;
            }
            if (!KTraEmail(txtEmail.Text.Trim()))
            {
                HienThongBao("Email không hợp lệ!", "Lỗi", MessageBoxIcon.Error);
                txtEmail.Focus();
                return false;
            }
            if (mtxtSoDT.Text.Trim() == "")
            {
                HienThongBao("Thông tin số điện thoại chưa có!", "Lỗi", MessageBoxIcon.Error);
                mtxtSoDT.Focus();
                return false;
            }
            if (dtpNgayNhan.Value == DateTime.MinValue)
            {
                HienThongBao("Thông tin ngày nhận chưa có!", "Lỗi", MessageBoxIcon.Error);
                dtpNgayNhan.Focus();
                return false;
            }
            if (dtpNgayLam.Value == DateTime.MinValue)
            {
                HienThongBao("Thông tin ngày làm chưa có!", "Lỗi", MessageBoxIcon.Error);
                dtpNgayLam.Focus();
                return false;
            }
            if (dtpNgayLam.Value.Date.CompareTo(dtpNgayNhan.Value.Date) == -1)
            {
                HienThongBao("Ngày làm phải sau ngày nhận!", "Lỗi", MessageBoxIcon.Error);
                dtpNgayLam.Focus();
                return false;
            }
            if (mtxtChuKyHD.Text.Trim() == "")
            {
                HienThongBao("Thông tin chu kỳ hợp đồng chưa có!", "Lỗi", MessageBoxIcon.Error);
                mtxtChuKyHD.Focus();
                return false;
            }
            if (cbbChucVu.SelectedValue.ToString() != "SVTT" && (mtxtChuKyHD.Text == "0" || mtxtChuKyHD.Text == "00" || mtxtChuKyHD.Text == " 0"))
            {
                HienThongBao("Chu kỳ hợp đồng phải lớn hơn 0!", "Lỗi", MessageBoxIcon.Error);
                mtxtChuKyHD.Focus();
                return false;
            }
            return true;
        }

        private bool KTraEmail(string emailString)
        {
            string emailPattern = @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z";
            return Regex.IsMatch(emailString, emailPattern, RegexOptions.IgnoreCase);
        }

        private bool KTraMaNV(string maNV)
        {
            if (maNV == "" || maNV.Length != 6)
                return false;
            return true;
        }

        private bool KTraCMND(string cmnd)
        {
            if (cmnd == "" || cmnd.Length != 9)
                return false;
            return true;
        }

        private bool KTraNgaySinh(DateTime date)
        {
            if (DateTime.Today.Year - date.Year < 18)
                return false;
            return true;
        }

        private void HienThongBao(string noiDung, string tieuDe, MessageBoxIcon icon)
        {
            MessageBox.Show(noiDung, tieuDe, MessageBoxButtons.OK, icon);
        }

        private void frmCapNhatTTNV_Load(object sender, EventArgs e)
        {
            ThanhCong = false;
            if (nv != null)
            {
                btnOK.Text = "Cập nhật";
                mtxtMaNV.Enabled = false;
            }
            else
                btnOK.Text = "Thêm";

            ActionResultAsList<ChucVu> ar = new ChucVuManager().LayDS();
            if (ar.Success)
            {
                cbbChucVu.DataSource = ar.ObjectList;
                cbbChucVu.DisplayMember = "TenChucVu";
                cbbChucVu.ValueMember = "MaChucVu";
            }
            else
            {
                HienThongBao(ar.Exceptions[ar.Exceptions.Count - 1].Message, "Lỗi", MessageBoxIcon.Error);
                this.Close();
            }

            ActionResultAsList<NhanVien> ar1 = new NhanVienManager().LayDSHienHanh();
            if (ar1.Success)
            {
                ar1.ObjectList.RemoveAll(n => n.TrangThai == TrangThaiNV.NghiViec);
                if (this.nv != null)
                    ar1.ObjectList.RemoveAll(n => n.MaNhanVien == nv.MaNhanVien);

                if (ar1.ObjectList.Count > 0)
                {
                    cbbMaNV.DataSource = cbbHoTenNV.DataSource = ar1.ObjectList;
                    foreach (var item in ar1.ObjectList)
                    {
                        cbbMaNV.AutoCompleteCustomSource.Add(item.MaNhanVien);
                        cbbHoTenNV.AutoCompleteCustomSource.Add(item.HoTen);
                    }

                    cbbMaNV.DisplayMember = cbbMaNV.ValueMember = cbbHoTenNV.ValueMember = "MaNhanVien";
                    cbbHoTenNV.DisplayMember = "HoTen";

                    cbbMaNV.AutoCompleteMode = cbbHoTenNV.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
                    cbbMaNV.AutoCompleteSource = cbbHoTenNV.AutoCompleteSource = AutoCompleteSource.CustomSource;

                    cbbMaNV.Validated += cbbMaNV_Validated;
                    cbbMaNV.SelectedIndexChanged += cbbMaNV_SelectedIndexChanged;

                    cbbMaNV_SelectedIndexChanged(cbbMaNV, new EventArgs());
                }
                else
                {
                    cbbMaNV.Enabled = false;
                    cbbHoTenNV.Enabled = false;
                    chkNguoiQL.Checked = true;
                }
            }
            else
            {
                HienThongBao(ar1.Exceptions[ar1.Exceptions.Count - 1].Message, "Lỗi", MessageBoxIcon.Error);
                this.Close();
            }

            dgvKyNang.AutoGenerateColumns = false;
            DuaThongTinLenForm();
            DuaKyNangLenForm();
        }

        void cbbMaNV_SelectedIndexChanged(object sender, EventArgs e)
        {
            List<NhanVien> list = cbbMaNV.DataSource as List<NhanVien>;
            NhanVien nv = list.Find(n => n.MaNhanVien == cbbMaNV.SelectedValue.ToString());
            lblHoTenQL.Text = lblHoTenQL.Tag.ToString() + " " + nv.HoTen;
            lblGioiTinhQL.Text = lblGioiTinhQL.Tag.ToString() + " " + nv.TenGioiTinh;
            lblNgaySinhQL.Text = lblNgaySinhQL.Tag.ToString() + " " + String.Format("{0:dd/MM/yyyy}", nv.NgaySinh);
            lblEmailQL.Text = lblEmailQL.Tag.ToString() + " " + nv.Email;
            lblSoDTQL.Text = lblSoDTQL.Tag.ToString() + " " + nv.SoDienThoai;
            lblChucVuQL.Text = lblChucVuQL.Tag.ToString() + " " + nv.ChucVu1.TenChucVu;
            lblTrangThaiQL.Text = lblTrangThaiQL.Tag.ToString() + " " + nv.TrangThai;
        }

        void cbbMaNV_Validated(object sender, EventArgs e)
        {
            if (!cbbMaNV.AutoCompleteCustomSource.Contains(cbbMaNV.Text))
                cbbMaNV.SelectedIndex = 0;
        }

        private NhanVien TaoNhanVien()
        {
            NhanVien nv = new NhanVien();
            nv.MaNhanVien = mtxtMaNV.Text;
            nv.HoNhanVien = txtHo.Text.Trim();
            nv.TenNhanVien = txtTen.Text.Trim();
            nv.GioiTinh = radNam.Checked;
            nv.NgaySinh = dtpNgaySinh.Value;
            nv.CMND = mtxtCMND.Text;
            nv.DiaChi = txtDiaChi.Text.Trim();
            nv.Email = txtEmail.Text.Trim();
            nv.SoDienThoai = mtxtSoDT.Text.Trim();
            nv.ChucVu = cbbChucVu.SelectedValue == null ? "" : cbbChucVu.SelectedValue.ToString();
            nv.NgayNhan = dtpNgayNhan.Value;
            nv.NgayBDLam = dtpNgayLam.Value;
            nv.ChuKyHopDong = Convert.ToInt32(mtxtChuKyHD.Text.Trim());
            if (nv.ChucVu == "SVTT")
            {
                nv.ChuKyHopDong = 0;
                nv.NgayKyLaiHD = null;
            }
            else
                nv.NgayKyLaiHD = nv.NgayNhan.AddMonths(nv.ChuKyHopDong);

            if (btnOK.Text == "Thêm")
                nv.TrangThai = TrangThaiNV.RanhRoi;
            else
                nv.TrangThai = this.nv.TrangThai;

            if (chkNguoiQL.Checked)
                nv.NhanVienQuanLy = null;
            else
                nv.NhanVienQuanLy = cbbMaNV.SelectedValue.ToString();

            return nv;
        }

        private void chkNguoiQL_CheckedChanged(object sender, EventArgs e)
        {
            cbbHoTenNV.Enabled = cbbMaNV.Enabled = !chkNguoiQL.Checked;
            if (chkNguoiQL.Checked)
            {
                lblHoTenQL.Text = lblHoTenQL.Tag.ToString();
                lblGioiTinhQL.Text = lblGioiTinhQL.Tag.ToString();
                lblNgaySinhQL.Text = lblNgaySinhQL.Tag.ToString();
                lblEmailQL.Text = lblEmailQL.Tag.ToString();
                lblSoDTQL.Text = lblSoDTQL.Tag.ToString();
                lblChucVuQL.Text = lblChucVuQL.Tag.ToString();
                lblTrangThaiQL.Text = lblTrangThaiQL.Tag.ToString();
            }
        }

        private void DuaThongTinLenForm()
        {
            if (btnOK.Text == "Thêm")
            {
                ActionResultAsList<NhanVien> ar = new NhanVienManager().LayNVCuoi();
                if (ar.Success)
                {
                    if (ar.ObjectList.Count > 0)
                    {
                        string maNV = ar.ObjectList[0].MaNhanVien;
                        maNV = maNV.Substring(2);
                        int ma = Convert.ToInt32(maNV) + 1;
                        string maMoi = "NV" + String.Format("{0:0000}", ma);
                        mtxtMaNV.Text = maMoi;
                    }
                }
                else
                    HienThongBao(ar.Exceptions[ar.Exceptions.Count - 1].Message, "Lỗi", MessageBoxIcon.Error);
                if (hs != null)
                {
                    txtHo.Text = hs.HoUngVien;
                    txtTen.Text = hs.TenUngVien;
                    if (hs.GioiTinh)
                        radNam.Checked = true;
                    else
                        radNu.Checked = true;
                    dtpNgaySinh.Value = hs.NgaySinh;
                    mtxtCMND.Text = hs.CMND;
                    txtDiaChi.Text = hs.DiaChi;
                    txtEmail.Text = hs.Email;
                    mtxtSoDT.Text = hs.SoDienThoai;
                }
            }
            else
            {
                mtxtMaNV.Text = nv.MaNhanVien;
                txtHo.Text = nv.HoNhanVien;
                txtTen.Text = nv.TenNhanVien;
                if (nv.GioiTinh)
                    radNam.Checked = true;
                else
                    radNu.Checked = true;
                dtpNgaySinh.Value = nv.NgaySinh;
                mtxtCMND.Text = nv.CMND;
                txtDiaChi.Text = nv.DiaChi;
                txtEmail.Text = nv.Email;
                mtxtSoDT.Text = nv.SoDienThoai;
                cbbChucVu.SelectedValue = nv.ChucVu;
                dtpNgayNhan.Value = nv.NgayNhan;
                dtpNgayLam.Value = nv.NgayBDLam;
                mtxtChuKyHD.Text = nv.ChuKyHopDong.ToString();
                if (nv.NhanVienQuanLy != null)
                    cbbMaNV.SelectedValue = nv.NhanVienQuanLy;
                else
                {
                    cbbMaNV.SelectedIndex = 0;
                    chkNguoiQL.Checked = true;
                }
            }
        }

        private void DuaKyNangLenForm()
        {
            ActionResultAsList<KyNang> ar = new KyNangManager().LayDS();
            if (ar.Success)
            {
                dgvKyNang.DataSource = new BindingListView<KyNang>(ar.ObjectList);
            }
            else
                HienThongBao(ar.Exceptions[ar.Exceptions.Count - 1].Message, "Lỗi", MessageBoxIcon.Error);

            ThietLapKN();
        }

        private void ThietLapKN()
        {
            if (nv != null)
            {
                ActionResultAsList<KyNang> ar1 = new KyNangManager().LayDSTheoMaNV(nv.MaNhanVien);
                if (ar1.Success)
                {
                    foreach (DataGridViewRow row in dgvKyNang.Rows)
                    {
                        string maKN = row.Cells["MaKyNang"].Value.ToString();
                        if (ar1.ObjectList.Exists(k => k.MaKyNang == maKN))
                            row.Cells["ChonKyNang"].Value = true;
                    }
                }
                else
                    HienThongBao(ar1.Exceptions[ar1.Exceptions.Count - 1].Message, "Lỗi", MessageBoxIcon.Error);
            }
            dsKN = LayDSMaKyNang();
        }

        private List<string> LayDSMaKyNang()
        {
            List<string> list = new List<string>();
            foreach (DataGridViewRow row in dgvKyNang.Rows)
            {
                if (Convert.ToBoolean(row.Cells["ChonKyNang"].Value))
                    list.Add(row.Cells["MaKyNang"].Value.ToString());
            }
            return list;
        }

        private void btnOK_Click(object sender, EventArgs e)
        {
            if (KTraThongTin())
            {
                NhanVien nv = TaoNhanVien();
                if (btnOK.Text == "Thêm")
                {
                    ActionResult ac = new NhanVienManager().Them(nv);
                    if (ac.Success)
                    {
                        if (hs != null)
                        {
                            new DuAnQKManager().CapNhatDAChoNV(hs.MaHoSo, nv.MaNhanVien);
                            new HoSoUngVienManager().CapNhatTrangThai(hs.MaHoSo, TrangThaiHoSo.NHAN_LV);
                        }
                        new NhanVienManager().CapNhatDSKyNang(nv.MaNhanVien, LayDSMaKyNang());
                        HienThongBao("Thêm nhân viên thành công!", "Thông báo", MessageBoxIcon.Information);
                        ThanhCong = true;
                        if (CapNhatDS != null)
                            CapNhatDS(LoaiHanhDong.Them, nv);
                        if (hs != null)
                            Close();
                    }
                    else
                        HienThongBao(ac.Exceptions[ac.Exceptions.Count - 1].Message, "Lỗi", MessageBoxIcon.Error);
                }
                else
                {
                    ActionResult ac = new NhanVienManager().CapNhat(ref nv);
                    if (ac.Success)
                    {
                        new NhanVienManager().CapNhatDSKyNang(nv.MaNhanVien, LayDSMaKyNang());
                        HienThongBao("Cập nhật nhân viên thành công!", "Thông báo", MessageBoxIcon.Information);
                        if (CapNhatDS != null)
                            CapNhatDS(LoaiHanhDong.CapNhat, nv);
                    }
                    else
                        HienThongBao(ac.Exceptions[ac.Exceptions.Count - 1].Message, "Lỗi", MessageBoxIcon.Error);
                }
            }
        }

        private void btnThemCV_Click(object sender, EventArgs e)
        {
            frmCapNhatTTCV f = new frmCapNhatTTCV();
            f.CapNhatDS = new CapNhatDSCV(this.CapNhatDSCV);
            f.ShowDialog();
        }

        private void btnSuaCV_Click(object sender, EventArgs e)
        {
            List<ChucVu> list = cbbChucVu.DataSource as List<ChucVu>;
            frmCapNhatTTCV f = new frmCapNhatTTCV();
            f.chucVu = list.Find(c => c.MaChucVu == cbbChucVu.SelectedValue.ToString());
            f.CapNhatDS = new CapNhatDSCV(this.CapNhatDSCV);
            f.ShowDialog();
        }

        private void CapNhatDSCV(LoaiHanhDong hd, ChucVu cv)
        {
            List<ChucVu> list = cbbChucVu.DataSource as List<ChucVu>;
            switch (hd)
            {
                case LoaiHanhDong.Them:
                    list.Add(cv);
                    cbbChucVu.DataSource = null;
                    cbbChucVu.DataSource = list;
                    cbbChucVu.DisplayMember = "TenChucVu";
                    cbbChucVu.ValueMember = "MaChucVu";
                    break;
                case LoaiHanhDong.Xoa:
                    int index = list.FindIndex(c => c.MaChucVu == cv.MaChucVu);
                    list.RemoveAt(index);
                    cbbChucVu.DataSource = null;
                    cbbChucVu.DataSource = list;
                    cbbChucVu.DisplayMember = "TenChucVu";
                    cbbChucVu.ValueMember = "MaChucVu";
                    cbbChucVu.SelectedIndex = 0;
                    break;
                case LoaiHanhDong.CapNhat:
                    int index1 = list.FindIndex(c => c.MaChucVu == cv.MaChucVu);
                    list[index1] = cv;
                    cbbChucVu.DataSource = null;
                    cbbChucVu.DataSource = list;
                    cbbChucVu.DisplayMember = "TenChucVu";
                    cbbChucVu.ValueMember = "MaChucVu";
                    break;
                default:
                    break;
            }
        }

        private void btnXoaCV_Click(object sender, EventArgs e)
        {
            string maCV = cbbChucVu.SelectedValue.ToString();
            List<ChucVu> list = cbbChucVu.DataSource as List<ChucVu>;
            ChucVu cv = list.Find(c => c.MaChucVu == maCV);
            if (cv.SoLuong > 0)
            {
                HienThongBao("Không thể xóa!\n\nChi tiết: Chức vụ \"" + cv.TenChucVu + "\" hiện đang có " + cv.SoLuong + " nhân sự.", "Cảnh báo", MessageBoxIcon.Warning);
            }
            else
            {
                DialogResult drs = MessageBox.Show("Bạn có muốn xóa thông tin chức vụ \"" + cv.TenChucVu + "\" không?", "Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (drs == DialogResult.Yes)
                {
                    ActionResult ac = new ChucVuManager().Xoa(maCV);
                    if (ac.Success)
                    {
                        HienThongBao("Xóa chức vụ thành công!", "Thông báo", MessageBoxIcon.Information);
                        CapNhatDSCV(LoaiHanhDong.Xoa, cv);
                    }
                    else
                        HienThongBao(ac.Exceptions[ac.Exceptions.Count - 1].Message, "Lỗi", MessageBoxIcon.Error);
                }
            }
        }

        private void CapNhatDSKN(LoaiHanhDong hd, KyNang kn)
        {
            List<KyNang> list = (dgvKyNang.DataSource as BindingListView<KyNang>).DataSource as List<KyNang>;

            switch (hd)
            {
                case LoaiHanhDong.Them:
                    list.Add(kn);
                    dgvKyNang.DataSource = new BindingListView<KyNang>(list);
                    break;
                case LoaiHanhDong.Xoa:
                    int index = list.FindIndex(n => n.MaKyNang == kn.MaKyNang);
                    list.RemoveAt(index);
                    dgvKyNang.DataSource = new BindingListView<KyNang>(list);
                    break;
                case LoaiHanhDong.CapNhat:
                    int index1 = list.FindIndex(n => n.MaKyNang == kn.MaKyNang);
                    list[index1] = kn;
                    dgvKyNang.DataSource = new BindingListView<KyNang>(list);
                    break;
                default:
                    break;
            }

            foreach (DataGridViewRow row in dgvKyNang.Rows)
            {
                string maKN = row.Cells["MaKyNang"].Value.ToString();
                if (dsKN.Contains(maKN))
                    row.Cells["ChonKyNang"].Value = true;
            }
        }

        private void tsmiThemKN_Click(object sender, EventArgs e)
        {
            frmCapNhatTTKN f = new frmCapNhatTTKN();
            f.CapNhatDS = new CapNhatDSKN(this.CapNhatDSKN);
            f.ShowDialog();
        }

        private void tsmiCapNhatKN_Click(object sender, EventArgs e)
        {
            List<KyNang> list = (dgvKyNang.DataSource as BindingListView<KyNang>).DataSource as List<KyNang>;
            string maKN = dgvKyNang.SelectedRows[0].Cells["MaKyNang"].Value.ToString();
            KyNang kn = list.Find(k => k.MaKyNang == maKN);
            frmCapNhatTTKN f = new frmCapNhatTTKN();
            f.kyNang = kn;
            f.CapNhatDS = new CapNhatDSKN(this.CapNhatDSKN);
            f.ShowDialog();
        }

        private void tsmiXoaKN_Click(object sender, EventArgs e)
        {
            List<KyNang> list = (dgvKyNang.DataSource as BindingListView<KyNang>).DataSource as List<KyNang>;
            string maKN = dgvKyNang.SelectedRows[0].Cells["MaKyNang"].Value.ToString();
            KyNang kn = list.Find(k => k.MaKyNang == maKN);
            if (kn.SoLuong > 0)
            {
                HienThongBao("Không thể xóa!\n\nChi tiết: Kỹ năng \"" + kn.TenKyNang + "\" hiện đang có " + kn.SoLuong + " nhân sự.", "Cảnh báo", MessageBoxIcon.Warning);
            }
            else
            {
                DialogResult drs = MessageBox.Show("Bạn có muốn xóa thông tin kỹ năng \"" + kn.TenKyNang + "\" không?", "Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (drs == DialogResult.Yes)
                {
                    ActionResult ac = new KyNangManager().Xoa(maKN);
                    if (ac.Success)
                    {
                        HienThongBao("Xóa kỹ năng thành công!", "Thông báo", MessageBoxIcon.Information);
                        CapNhatDSKN(LoaiHanhDong.Xoa, kn);
                    }
                    else
                        HienThongBao(ac.Exceptions[ac.Exceptions.Count - 1].Message, "Lỗi", MessageBoxIcon.Error);
                }
            }
        }

        private void dgvKyNang_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            foreach (DataGridViewRow row in dgvKyNang.Rows)
            {
                string maKN = row.Cells["MaKyNang"].Value.ToString();
                if (dsKN.Contains(maKN))
                    row.Cells["ChonKyNang"].Value = true;
            }
        }

        private void dgvKyNang_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            tsmiCapNhatKN.PerformClick();
        }

        private void dgvKyNang_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            btnOK.Focus();
            dsKN = LayDSMaKyNang();
        }

    }
}
